package com.bgs.travelapp.user.service.impl;

import com.bgs.travelapp.fileManager.service.FileManagerService;
import com.bgs.travelapp.page.MyPageHelper;
import com.bgs.travelapp.page.PageRequest;
import com.bgs.travelapp.page.PageResult;
import com.bgs.travelapp.result.CommonResult;
import com.bgs.travelapp.tourNote.eneity.TourNoteEntity;
import com.bgs.travelapp.user.entity.UserEntity;
import com.bgs.travelapp.user.mapper.UserMapper;
import com.bgs.travelapp.user.service.UserService;
import com.bgs.travelapp.util.RedisUtil;
import org.apache.catalina.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.Base64Utils;
import org.springframework.util.DigestUtils;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartRequest;
import tk.mybatis.mapper.entity.Example;

import java.util.Date;
import java.util.List;

/**
 * lzy 2022-7-20 10点03分
 * hbx 2022-8-11 11:18:39
 * 前台非管理用户模块
 */
@Service
public class UserServiceImpl implements UserService {

    @Autowired
    UserMapper userMapper;

    @Autowired
    FileManagerService fileManagerService;

    @Autowired
    RedisUtil redisUtil;

    /**
     * 管理前端用户（后台管理）
     * lzy 2022-7-21 (09点19分)
     *
     * @param userEntity
     * @param multipartRequests
     * @return
     */
    @Override
    public Integer saveUser(UserEntity userEntity, MultipartRequest multipartRequests) {
        MultipartFile file = multipartRequests.getFile("file");
        Integer integer = 0;
        int insert = 0;
        if (file != null) {
            integer = fileManagerService.uploadPicture(file);
        }
        if (integer == 0) {
            integer = 656;
        }
        String md5Str = DigestUtils.md5DigestAsHex(userEntity.getPassword().getBytes());
        userEntity.setPassword(md5Str);
        userEntity.setAvatarId(integer);
        userEntity.setCreateTime(new Date());
        userEntity.setDelFlag(0);
        insert = userMapper.insert(userEntity);
        return insert;
    }

    /**
     * 使用分页格式 获取用户信息列表 （后台管理）
     * Lzy 2022-7-21 09点35分
     *
     * @param pageRequest
     * @return
     */
    @Override
    public PageResult getUserList(PageRequest pageRequest) {
        MyPageHelper.startPage(pageRequest);
        UserEntity userEntity = new UserEntity();
        userEntity.setDelFlag(0);
        List<UserEntity> select = userMapper.select(userEntity);
        PageResult pageResult = MyPageHelper.pageInfo(select);
        return pageResult;
    }

    /**
     * 校验登录名是否存在（后台管理）
     * lzy 2022-7-21 14点36分
     *
     * @param loginName
     * @return
     */
    @Override
    public Integer checkLoginName(String loginName) {
        UserEntity userEntity = new UserEntity();
        userEntity.setLoginName(loginName);
        return userMapper.selectCount(userEntity);
    }

    /**
     * 修改用户信息（后台管理）
     * lzy 2022-7-21 19点42分
     *
     * @param multipartRequest
     * @param userEntity
     * @return
     */
    @Override
    public Integer editUser(MultipartRequest multipartRequest, UserEntity userEntity) {
        MultipartFile file = multipartRequest.getFile("file");
        Integer avatar_id = userEntity.getAvatarId();
        String md5Str = DigestUtils.md5DigestAsHex(userEntity.getPassword().getBytes());
        userEntity.setPassword(md5Str);
        if (file != null) {
            avatar_id = fileManagerService.uploadPicture(file);
        }
        userEntity.setAvatarId(avatar_id);
        int i = userMapper.updateByPrimaryKeySelective(userEntity);
        return i;
    }

    /**
     * 删除用户信息（后台管理）
     * lzy 2022-7-25 10点43分
     *
     * @param id
     * @return
     */
    @Override
    public Integer deleteUser(Integer id) {
        UserEntity userEntity = new UserEntity();
        userEntity.setDelFlag(1);
        userEntity.setId(id);
        int i = userMapper.updateByPrimaryKeySelective(userEntity);
        return i;
    }

    /**
     * 绑定/更改邮箱校验（后台管理）
     * lzy 2022-8-3 15点57分
     *
     * @param mail 查询用户信息 （前端页面---我的会员卡（全部交易记录））
     *             gpd 2022-08-03 19点24分
     * @param id
     * @return
     */
    @Override
    public CommonResult checkMailEdit(String mail, Integer id) {
        Integer integer = userMapper.checkMailEdit(mail, id);
        if (integer > 0) {
            return CommonResult.error("999");
        } else {
            return CommonResult.ok(integer);
        }

    }

    /**
     * 绑定/更改邮箱（后台管理）
     * lzy 2022-8-3 21点03分
     * @param mail
     * @param code
     * @param id
     * @return
     */
    @Override
    public CommonResult editMail(String mail, String code, Integer id) {
        UserEntity user = new UserEntity();
        user.setMail(mail);
        user.setId(id);
        mail = mail + "register";
        Object o = redisUtil.get(mail);
        int i = 0;
        if (code.equalsIgnoreCase((String) o)) {
            i = userMapper.updateByPrimaryKeySelective(user);
        }
        return CommonResult.ok(i);
    }

    /**
     * 查询用户信息（前端---我的会员卡（查看明细））
     * gpd 2022-08-04 08点28分
     * @param id
     * @return
     */
    @Override
    public List<UserEntity> getQueryUserList(Integer id) {
        UserEntity userEntity = new UserEntity();
        userEntity.setId(id);
        return userMapper.select(userEntity);
    }

    /**
     * 查询用户头像id
     * 前端---问答（对方头像）
     * gpd 2022-08-19 15点57分
     * @param toUserName
     * @return
     */
    @Override
    public List<UserEntity> getUserAvatarId(String toUserName) {
        UserEntity userEntity = new UserEntity();
        userEntity.setLoginName(toUserName);
        return userMapper.select(userEntity);
    }

    /**
     * 根据游记里的用户id查询用户邮箱信息（后端管理）
     * hbx 2022年8月23日09:55:35
     * @param userId
     * @return
     */
    @Override
    public List<UserEntity> mailByUserId(Integer userId) {
        UserEntity userEntity = new UserEntity();
        userEntity.setId(userId);
        List<UserEntity> select = userMapper.select(userEntity);
        return select;
    }
    /**
     * 前端修改用户信息
     * fys 2022.8.23 11:21
     * @param userEntity
     * @return
     */
    @Override
    public Integer updateUser(UserEntity userEntity) {
        int id = userMapper.updateByPrimaryKeySelective(userEntity);
        if(id>0){
            System.out.println("修改成功");
        }else{
            System.out.println("添加失败");
        }
        return id;
    }
    /**
     * 前端修改用户头像
     * fys 2022.8.23 16:21
     * @param multipartRequest
     * @param id
     * @return
     */
    @Override
    public Integer updateUserAratar(MultipartRequest multipartRequest, Integer id) {
        UserEntity userEntity = new UserEntity();
        Integer avatar_id = userEntity.getAvatarId();
        MultipartFile file = multipartRequest.getFile("file");
        if (file != null) {
            System.out.println("图片上传成功");
            avatar_id = fileManagerService.uploadPicture(file);
        }
        userEntity.setId(id);
        userEntity.setAvatarId(avatar_id);
        int i = userMapper.updateByPrimaryKeySelective(userEntity);
        return i;
    }

    /**
     * 前端绑定/修改用户手机号
     * fys 2022.8.23 17:21
     * @param id
     * @param phone
     * @return
     */
    @Override
    public Integer updateUserPhone(Integer id, String phone) {
        UserEntity userEntity = new UserEntity();
        userEntity.setId(id);
        userEntity.setPhone(phone);
        return userMapper.updateByPrimaryKeySelective(userEntity);
    }

    /**
     * 前端绑定/修改用户邮箱
     * fys 2022.8.23 20:10
     * @param id
     * @param mail
     * @return
     */
    @Override
    public Integer updateUserMail(Integer id, String mail) {
        UserEntity userEntity = new UserEntity();
        userEntity.setId(id);
        userEntity.setMail(mail);
        return userMapper.updateByPrimaryKeySelective(userEntity);
    }

}
